val as_to_string : string -> string -> string
type compareresult = EQ | NE | GT | GE | LT | LE
type named = Var of string | Reg of string | In of string | Out of string
type valTyp = Uint of int | Bits of int | Sint of int | B | U | S     
type asInt = Int of int | AsInt of named
type range = Range of asInt*asInt | Infinity
type sigTyp = valTyp * range
type 'a expression =
    Named of named
  | Const of 'a
  | Sum of 'a expression * 'a expression
  | Prod of 'a expression * 'a expression
  | Diff of 'a expression * 'a expression
  | Div of 'a expression * 'a expression
  | Mod of 'a expression * 'a expression
  | And of 'a expression * 'a expression
  | Or of 'a expression * 'a expression
  | Xor of 'a expression * 'a expression
  | Comp of 'a expression * 'a expression * compareresult
  | Not of 'a expression
  | Bit of 'a expression * asInt
  | Resize of 'a expression * range
val ( +^ ) : 'a expression -> 'a expression -> 'a expression
val ( *^ ) : 'a expression -> 'a expression -> 'a expression
val ( -^ ) : 'a expression -> 'a expression -> 'a expression
val ( /^ ) : 'a expression -> 'a expression -> 'a expression
val ( %^ ) : 'a expression -> 'a expression -> 'a expression
val ( &^ ) : 'a expression -> 'a expression -> 'a expression
val ( |^ ) : 'a expression -> 'a expression -> 'a expression
val ( ^^ ) : 'a expression -> 'a expression -> 'a expression
val ( !^ ) : 'a expression -> 'a expression
val ( ==^ ) : 'a expression -> 'a expression -> 'a expression
val ( !=^ ) : 'a expression -> 'a expression -> 'a expression
val string_of_named : named -> string
val string_of_asInt : asInt -> string
val to_string : sigTyp expression -> string
